热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

最强检测|YOLOV4?都是弟弟!CenterNet2以56.4mAP超越当前所有检测模型

仅单尺度测试,在COCO上最高可高达56.4mAP!超越现所有网络,如ScaledYOLOv4、GFLV2等,其中一个版本&


仅单尺度测试,在COCO上最高可高达56.4 mAP!超越现所有网络,如ScaledYOLOv4、GFLV2等,其中一个版本,49.2 mAP/33FPS!代码刚刚开源!
作者单位:UT Austin, Intel

1 简介

我们都知道目标检测的目的就是找到图像中的所有目标,并识别它们的位置和属于某一类的概率。One-Stage目标检测在一个框架中共同推断位置和类别的概率。通过训练它们最大限度地提高其框的精度和预测概率的精度,并在最后应用到推理之中。

Two-Stage检测器首先发现潜在目标及其位置,然后(在第2阶段)对这些潜在目标进行分类。第1阶段的目的是最大限度地召回目标,而第2阶段是最大限度地在第1阶段过滤的目标。

而本文通过优化Two-Stage的联合概率目标的下界,提出了一个简单的改进标准Two-Stage检测器训练方法。概率处理建议对Two-Stage架构进行更改。具体来说,第1阶段需要推断一个校准目标的似然性。目前Two-Stage目标检测中的RPN是为了最大化召回而设计的,不产生准确的可能性。然而,One-Stage方法可以。

在目前最先进的One-Stage检测器的基础上建立了一个概率Two-Stage检测器。对于每一阶段的检测,CenterNet2模型都会提取区域级特征并进行分类。在第2阶段使用更快的R-CNN或级联分类器。这两个阶段一起训练,以最大限度地提高预测的概率准确度。在推理中,CenterNet2使用这个最终的对数似然作为检测得分。

概率Two-Stage检测器比One-Stage检测器和Two-Stage检测器更快、更准确。与基于Anchor的Two-Stage检测器相比,CenterNet2的第1阶段更准确,允许检测器在RoI头部使用更少的建议,使检测器整体上更准确和更快。与One-Stage检测器相比,CenterNet2的第1阶段使用了更精简的Head设计,并且只有一个输出类用于密集图像水平预测。由于类别数量的急剧减少所带来的加速,远远超过了第2阶段的额外成本。CenterNet2的第2阶段充分利用了多年来Two-Stage检测器的进展,并在一阶段基线上显著提高了检测精度。

实验表明,CenterNet2检测器通过单尺度测试在COCO测试开发上达到了56.4mAP,优于所有已发布的结果。CenterNet2检测器使用轻量级Backbone,在Titan Xp上以33fps的速度在COCO上实现了49.2mAP的性能,优于Scaled YOLOv4。

2 相关工作

2.1 One-Stage Detectors

One-Stage Detectors同时预测输出类的概率和目标的位置。

RetinaNet对一组预定义的滑动锚框进行分类,并通过调整每个输出的损失来处理前景-背景不平衡。

FCOSCenterNet消除了每像素多个锚点的问题,并根据位置对前景/背景进行分类。

ATSSPAA通过改变前景和背景的定义来进一步改进FCOS。

GFLAutoassign改变Hard Foreground-Background分配为加权软分配。

AlignDet在输出之前使用一个可变形的卷积层来收集更丰富的分类和回归特征。

RepPointDenseRepPoint将边界框编码为一组轮廓点,并使用点集特征进行分类。

BorderDet沿着边界框池化特征以实现更好的localization。

大多数One-Stage Detectors都有可靠的概率解释。虽然One-Stage Detectors取得了具有竞争力的性能,但与Two-Stage Detectors相比,它们通常依赖于单独分类和回归分支。事实上,如果类别很大(如LVIS或Objects365数据集),它们不再比Two-Stage Detectors更快。此外,One-Stage Detectors仅使用正样本的局部特征进行回归和分类,这有时与目标不对齐。

而本文提出的概率Two-Stage Detector框架分解了多个阶段的概率分布并保留了One-Stage Detector的概率解释,同时提高了准确性和速度。

2.2 Two-Stage Detectors

Two-Stage Detector首先使用区域建议网络(RPN)生成粗糙的区域建议框,然后使用一个专用的检测头对它们进行分类和回归。

Fast-RCNN使用2个连接层作为RoI头部。

Cascade-RCNN使用FasterRCNN的3个级联阶段,每个阶段都有不同的正阈值,以便后期更多地关注定位精度。

HTC利用额外的实例和语义分割标注来增强Cascade-RCNN的级间特征流。

TSD对每个RoI的分类和Localization分支进行解耦。

Two-Stage Detector在许多情况下仍然更精确。目前,所有Two-Stage Detector都使用一个相对较弱的RPN,最大限度地召回排名前1K的预选框,并且不使用测试时的预选框分数。大量的预选框减慢了速度,并且基于召回的建议网络不能直接提供与One-Stage Detector相同的概率。

CenterNet2框架解决了这个问题,并将一个强大的One-Stage Detector与后面的分类阶段集成在一起。在第1阶段使用更少、质量更高的预选框,以输出更高的准确性和更快的速度。

2.3 Anchor Free && DETR

也有很多的检测器通过图像中的点来识别物体。

CornerNet则是检测左上角和右下角,并使用嵌入特征对它们进行分组。

ExtremeNet检测四个极值点,并使用一个额外的中心点对它们进行分组。

Duan等人通过检测中心点来改善Corner的分组。

Corner Proposal Net使用成对的角落分组作为区域提议。

CenterNet检测中心点,并从中回归边界框参数。

DETR变形DETR去除检测器中的密集输出,而使用Trnasformer直接预测一组Bounding Boxes。

基于Corner的检测器、DETR与传统检测器的主要区别在于网络结构。基于Corner的检测器使用全卷积网络,通常具有对称的下采样层和上采样层,并以较小的步长生成单个特征图。DETR式检测器使用Trnasformer作为解码器。

传统的One-Stage和Two-Stage检测器通常使用由轻量化上采样层增强的图像分类网络,并产生多尺度特征(FPN)。

3 Two-Stage检测的概率解释

对于每一幅图像,检测的目标是产生

个边界框

,并且每个候选框的类分布服从

分布。在这个工作,CenterNet2保持边界框回归不变,只关注类分布。

一个Two-Stage检测器将这种分布分解为2部分:类别不可知对象似然性

(第一阶段)和条件类别分类

(第二阶段)。这里

表示第一阶段的前景,

表示背景。

任何阴性检测

导致背景

分类:

。在一个多级检测器中,分类是由多个级联级的集合完成的,而Two-Stage检测器使用一个单一的分类器。那么两Two-Stage模型的联合类分布为:

这里使用极大似然估计训练检测器。对于目标类,最大化:

对于背景类,最大似然:

这一目标将第1阶段和第2阶段的概率估计与损失和梯度计算联系在一起。准确的评价需要对第2阶段的所有第1阶段产出进行密集的评价,这将大大降低训练的速度。相反,文中推出了2个下界的目标共同优化。第1个下界使用Jensen不等式:

其中,

,

:

这个下界最大化了第1阶段中任何高分对象的第2阶段背景的对数似然。这里的

,

,但是这个界限可能会被松弛为

,

,于是第2界只涉及第一阶段的目标:

它使用

和单调

。对于

来说,这个界限是紧密的。理想情况下,最紧密的界限是通过使用前式的最大值来获得的。在实践中同时优化2个边界可以得到更好的结果。

有了下界Eq.(4)和正目标Eq.(2),第1阶段的训练简化为最大似然估计,在标注对象上使用正标签,在所有其他位置使用负标签。这相当于训练一个二元一级检测器,或者一个RPN。

4 检测器的选择

公式和标准的Two-Stage检测器的关键区别在于在检测得分中使用了类不可知检测

。在概率形式中,分类分数乘以类别不可知检测分数。这需要一个强大的第一阶段检测器,不仅最大限度地召回建议框,而且还可以为每个建议框预测一个可靠的目标概率。在实验中,作者使用比较好的One-Stage检测器来估计这个对数似然概率。

概率Two-Stage检测器的核心部件是Stronge First Stage。第1阶段需要预测一个准确的目标可能性,以告知整体检测分数,而不是最大化目标覆盖范围。在流行的One-Stage检测器的基础上实验了4种不同的设计。对于每一个检测器,作者强调了将它们从One-Stage检测器转换为概率Two-Stage检测器中的第1阶段所需的检测器。

4.1 RetinaNet

RetinaNet与传统的Two-Stage检测器的RPN非常相似,但有三个关键区别:

  1. 较重的Head设计(4层vs1层 in RPN);

  2. 更严格的正负锚定定义;

  3. Focal Loss。

这些组件中的每一个都提高了RetinaNet产生校准的One-Stage检测可能性的能力。

作者在第一阶段的设计中使用了所有这些。默认情况下,RetinaNet使用两个单独的头部来进行边界框回归和分类。在第一阶段设计中发现两个任务有一个共享的Head就足够了,因为对象或非对象分类更容易并且需要更少的网络容量。这也加快了推理速度。

4.2 CenterNet

CenterNet将对象作为位于其中心的关键点,然后回归到方框参数。原始的CenterNet在单个尺度上运行,而传统的Two-Stage检测器使用特征金字塔(FPN)。而本文使用FPN将CenterNet升级到多尺度。

具体来说,使用Retinaanet Style的ResNet-FPN作为主干,从stride=8到128输出特征映射。将四层分类分支和回归分支应用于FPN的所有层次,以产生检测热图和边界框回归图。

在训练过程中,根据对象大小,在固定的分配范围内,将ground-truth center标注分配给特定的FPN级别。受到GFL的启发,在3×3中心附近添加了一些位置,这些位置已经产生了高质量的边界框作为正数。使用到边界的距离作为边界框表示,并使用gIoU损失作为边界框回归损失函数。作者将改进后的CenterNet称为CenterNet*。

4.3 ATSS

ATSS用自适应的IoU阈值对One-Stage检测器的分类概率进行建模,并使用centerness来校准分数。在一个概率的Two-Stage Baseline中使用的是ATSS,并乘以中心和前景分类得分为每个proposal。再次合并分类和回归Head,以稍微加速。

4.4 GFL

GFL使用回归质量来指导目标似然训练。在概率Two-Stage Baseline中删除基于积分的回归,仅使用基于距离的回归来保持一致性,并再次合并2个Head。

5 实验

5.1 基础Two-Stage模型实验

One-Stage架构推断出

)。对于每一个将它们与第二阶段的推断相结合

。作者实验了2个基本的第二阶段设计:FasterRCNN和CascadeRCNN。

每一个概率Two-Stage FasterRCNN模型在mAP上都比它的一级前身提高了1-2个百分点,在mAP上比原来的两阶段FasterRCNN提高了3个百分点。更有趣的是,由于更精简的头部设计,每个Two-Stage的概率FasterRCNN都比它的一级前身更快。

由于更有效的FPN和概率检测器使用更少的proposal,许多概率Two-Stage FasterRCNN模型比原始的两阶段FasterRCNN更快。

在CascadeRCNN模型中观察到类似的趋势。在这些概率Two-Stage模型中,CascadeRCNN-CenterNet设计表现最好。

5.2 Real-Time模型实验

在相同的backbone和训练下,CenterNet2比realtime-FCOS性能好1.6个mAP,并且只慢4毫秒。使用相同的基于FCOS的Backbone和更长的训练,它在原来的CenterNet上改进了7.7mAP,并轻松地超越了流行的YOLOv4和效率更高的检测器,在40fps下有45.6mAP。使用稍微不同的FPN结构,并结合Self-Training,CenterNet2以33帧每秒的速度获得49.2mAP。虽然现有的大多数实时检测都是One-Stage,但在这里,作者展示了Two-Stage检测其也可以像One-Stage一样快,同时提供更高的精度。

5.3 SOTA模型对比

作者这里使用了一个更强的Backbone Res2Net-BiFPN,一个更大的输入分辨率(训练用:1560x1560,测试用:1280x1280测试)和heavy crop augmentation(0.1-2),和一个长的时间Self-Training来标记图像。最终模型单模型达到56.4 mAP,优于所有发表的所有模型。

6 参考

[1].Probabilistic two-stage detection
[2].https://github.com/xingyizhou/CenterNet2

欢迎添加群助手微信,邀请您加入大佬云集-计算机视觉交流群!

???? 长按识别添加,邀请您进群!



推荐阅读
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • 本文探讨了在任务完成后将其转换为最终状态时的异常处理机制。通过分析 `TaskCompletionSource` 的使用场景,详细阐述了其在异步编程中的重要作用,并提供了具体的实现方法和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在多年使用Java 8进行新应用开发和现有应用迁移的过程中,我总结了一些非常实用的技术技巧。虽然我不赞同“最佳实践”这一术语,因为它可能暗示了通用的解决方案,但这些技巧在实际项目中确实能够显著提升开发效率和代码质量。本文将深入解析并探讨这四大高级技巧的具体应用,帮助开发者更好地利用Java 8的强大功能。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • Java 点餐系统源代码附带管理后台(免费提供)
    本项目提供了一套基于 Java 的点餐系统,包括前端小程序和后端管理平台。采用 Spring Boot 和 SSM 框架,结合 MySQL 和 Redis 数据库技术,适用于学习和二次开发。有需要源代码的开发者可以通过私信联系,免费获取下载链接。 ... [详细]
author-avatar
金叶诺一的妈妈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有